package com.ywl.stream;

import com.ywl.entity.Author;
import com.ywl.entity.Book;
import com.ywl.utils.AuthorFactory;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 终止操作collect 获取集合
 *
 * @author 24040
 * @name StreamDemo06
 * @date 2022-08-22 14:01
 */
public class StreamDemo06 {
    public static void main(String[] args) {
        List<Author> authors = AuthorFactory.getAuthors();

//        List<String> collect = test01(authors);
        /*Set<Book> books = test02(authors);
        books.stream().forEach(book -> System.out.println(book));*/
        test03(authors);
    }

    /**
     * 获取一个存放所有作者名字的List集合。
     */
    private static List<String> test01(List<Author> authors) {
        return authors.stream()
                .distinct()
                .map(author -> author.getName())
                //我们一般使用提供的Collectors工具类
                .collect(Collectors.toList());
    }

    /**
     * 获取一个存放所有作者名字的Set集合。
     */
    private static Set<Book> test02(List<Author> authors) {
        return authors.stream()
                .distinct()
                .flatMap(author -> author.getBooks().stream())
                .distinct()
                //我们一般使用提供的Collectors工具类
                .collect(Collectors.toSet());
    }

    /**
     * 获取一个Map集合，map的key为作者名，value为List<Book>
     */
    private static void test03(List<Author> authors) {
        Map<String, List<Book>> collect = authors.stream()
                .distinct()
                .collect(Collectors.toMap(
                        author -> author.getName(),
                        author -> author.getBooks()
                ));
        System.out.println(collect);
    }
}
